<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        <meta name="author" content="隐星魂 (Roy.Sun)">
        
        <link rel="shortcut icon" href="../../img/favicon.ico">
        <title>02.系统基本架构 - 玄武操作系统</title>
        <link href="../../css/bootstrap.min.css" rel="stylesheet">
        <link href="../../css/font-awesome.min.css" rel="stylesheet">
        <link href="../../css/base.css" rel="stylesheet">
        <link rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/10.0.3/styles/color-brewer.min.css">

        <script src="../../js/jquery-1.10.2.min.js" defer></script>
        <script src="../../js/bootstrap.min.js" defer></script>
        <script src="https://cdn.staticfile.org/highlight.js/10.0.3/highlight.min.js"></script>
        <script>hljs.initHighlightingOnLoad();</script> 
    </head>

    <body>
        <div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary">
            <div class="container">
                <a class="navbar-brand" href="../..">玄武操作系统</a>
                <!-- Expander button -->
                <button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#navbar-collapse">
                    <span class="navbar-toggler-icon"></span>
                </button>

                <!-- Expanded navigation -->
                <div id="navbar-collapse" class="navbar-collapse collapse">
                        <!-- Main navigation -->
                        <ul class="nav navbar-nav">
                            <li class="navitem">
                                <a href="../.." class="nav-link">主页</a>
                            </li>
                            <li class="navitem">
                                <a href="../../license/" class="nav-link">开源协议</a>
                            </li>
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">快速开发指南 <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
  <li class="dropdown-submenu">
    <a href="#" class="dropdown-item">STM32</a>
    <ul class="dropdown-menu">
            
<li>
    <a href="../../QuickGuide/stm32/01-Envsetup-Guide/" class="dropdown-item">开发环境搭建指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/stm32/02-Project-Setup-Guide/" class="dropdown-item">工程配置指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/stm32/03-atkh743/" class="dropdown-item">正点原子阿波罗H743开发板上手指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/stm32/04-fk429m/" class="dropdown-item">反客F429核心板上手指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/stm32/05-atkf407core/" class="dropdown-item">正点原子F407核心板上手指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/stm32/06-atkf103core/" class="dropdown-item">正点原子F103核心板上手指南</a>
</li>
    </ul>
  </li>
                                    
  <li class="dropdown-submenu">
    <a href="#" class="dropdown-item">NXP S32K</a>
    <ul class="dropdown-menu">
            
<li>
    <a href="../../QuickGuide/s32k/01-Envsetup-Guide/" class="dropdown-item">开发环境搭建指南</a>
</li>
            
<li>
    <a href="../../QuickGuide/s32k/02-Project-Setup-Guide/" class="dropdown-item">工程配置指南</a>
</li>
    </ul>
  </li>
                                    
  <li class="dropdown-submenu">
    <a href="#" class="dropdown-item">玄武内核模块</a>
    <ul class="dropdown-menu">
            
<li>
    <a href="../../QuickGuide/xwko/01-XuanWuKO-Guide/" class="dropdown-item">上手指南</a>
</li>
    </ul>
  </li>
                                </ul>
                            </li>
                            <li class="dropdown active">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">应用手册 <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../00-index/" class="dropdown-item">00.目录</a>
</li>
                                    
<li>
    <a href="../01-brief/" class="dropdown-item">01.简介</a>
</li>
                                    
<li>
    <a href="./" class="dropdown-item active">02.系统基本架构</a>
</li>
                                    
<li>
    <a href="../03-Build-System/" class="dropdown-item">03.构建系统</a>
</li>
                                    
<li>
    <a href="../04-Boot-Flow/" class="dropdown-item">04.启动流程</a>
</li>
                                    
<li>
    <a href="../05-IRQ/" class="dropdown-item">05.中断控制</a>
</li>
                                    
<li>
    <a href="../06-SKD/" class="dropdown-item">06.调度器</a>
</li>
                                    
<li>
    <a href="../07-Thread/" class="dropdown-item">07.线程</a>
</li>
                                    
<li>
    <a href="../08-SWT/" class="dropdown-item">08.软件定时器</a>
</li>
                                    
<li>
    <a href="../09-PM/" class="dropdown-item">09.电源管理</a>
</li>
                                    
<li>
    <a href="../10-Lock/" class="dropdown-item">10.锁</a>
</li>
                                    
<li>
    <a href="../11-Sync/" class="dropdown-item">11.同步</a>
</li>
                                    
<li>
    <a href="../12-MM/" class="dropdown-item">12.内存管理</a>
</li>
                                    
<li>
    <a href="../13-C-Lib/" class="dropdown-item">13.玄武C库</a>
</li>
                                </ul>
                            </li>
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">移植笔记 <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../../PortingNote/00-index/" class="dropdown-item">目录</a>
</li>
                                    
<li>
    <a href="../../PortingNote/01-Porting-Note/" class="dropdown-item">移植笔记</a>
</li>
                                    
  <li class="dropdown-submenu">
    <a href="#" class="dropdown-item">ARM-Cortex-M</a>
    <ul class="dropdown-menu">
            
<li>
    <a href="../../PortingNote/ARM-Cortex-M/01-ARM-Cortex-M-Porting-Note/" class="dropdown-item">架构移植笔记</a>
</li>
            
<li>
    <a href="../../PortingNote/ARM-Cortex-M/02-STM32-Porting-Note/" class="dropdown-item">STM32</a>
</li>
    </ul>
  </li>
                                </ul>
                            </li>
                            <li class="dropdown">
                                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">规范 <b class="caret"></b></a>
                                <ul class="dropdown-menu">
                                    
<li>
    <a href="../../Specification/00-index/" class="dropdown-item">目录</a>
</li>
                                    
<li>
    <a href="../../Specification/01-Git-Commit-Specification/" class="dropdown-item">git-commit规范</a>
</li>
                                    
<li>
    <a href="../../Specification/02-Version-Branch-Specification/" class="dropdown-item">版本分支规范</a>
</li>
                                </ul>
                            </li>
                        </ul>

                    <ul class="nav navbar-nav ml-auto">
                        <li class="nav-item">
                            <a href="#" class="nav-link" data-toggle="modal" data-target="#mkdocs_search_modal">
                                <i class="fa fa-search"></i> 搜索
                            </a>
                        </li>
                            <li class="nav-item">
                                <a rel="prev" href="../01-brief/" class="nav-link">
                                    <i class="fa fa-arrow-left"></i> 上一篇
                                </a>
                            </li>
                            <li class="nav-item">
                                <a rel="next" href="../03-Build-System/" class="nav-link">
                                    下一篇 <i class="fa fa-arrow-right"></i>
                                </a>
                            </li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="container">
            <div class="row">
                    <div class="col-md-3"><div class="navbar-light navbar-expand-md bs-sidebar hidden-print affix" role="complementary">
    <div class="navbar-header">
        <button type="button" class="navbar-toggler collapsed" data-toggle="collapse" data-target="#toc-collapse" title="Table of Contents">
            <span class="fa fa-angle-down"></span>
        </button>
    </div>

    
    <div id="toc-collapse" class="navbar-collapse collapse card bg-secondary">
        <ul class="nav flex-column">
            
            <li class="nav-item" data-level="1"><a href="#2" class="nav-link">2.系统基本架构</a>
              <ul class="nav flex-column">
            <li class="nav-item" data-level="2"><a href="#21" class="nav-link">2.1.概述</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#22" class="nav-link">2.2.软件架构与配置</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#23" class="nav-link">2.3.基本类型</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#_1" class="nav-link">标准头文件</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#24" class="nav-link">2.4.配置说明</a>
              <ul class="nav flex-column">
              </ul>
            </li>
            <li class="nav-item" data-level="2"><a href="#25" class="nav-link">2.5.附录</a>
              <ul class="nav flex-column">
              </ul>
            </li>
              </ul>
            </li>
        </ul>
    </div>
</div></div>
                    <div class="col-md-9" role="main">

<h1 id="2">2.系统基本架构</h1>
<h2 id="21">2.1.概述</h2>
<p>玄武OS在设计时就充分考虑了代码的复用性和移植性，代码被架构成多层结构：
BSP层、内核层、中间件层和应用层。</p>
<p><img alt="img" src="../../res/figure/xwos-arch.png" title="玄武OS架构图" /></p>
<ul>
<li>编译系统；</li>
<li>移植层：<ul>
<li>处理器架构/CPU/SOC/外设芯片相关的代码；</li>
<li>电路板相关的源代码以及项目相关的配置。</li>
</ul>
</li>
<li>系统层：<ul>
<li>玄武C库：原子操作库、位操作库、数据结构等；</li>
<li>内核：<ul>
<li>中断管理；</li>
<li>调度器：单核、多核、线程调度、定时器；</li>
<li>同步：信号量、条件量、事件标志、信号选择器、线程栅栏；</li>
<li>锁：自旋锁、顺序锁、互斥锁；</li>
<li>内存管理：简单内存分配器、内存切片算法、伙伴算法、内存池。</li>
</ul>
</li>
</ul>
</li>
<li>中间件层(Middleware Layer)：驱动/中间件/第三方开源组件；</li>
<li>应用层(Application Layer)。</li>
</ul>
<h2 id="22">2.2.软件架构与配置</h2>
<h3 id="221">2.2.1.描述</h3>
<p>玄武OS每一层软件都有独立的配置文件，所有配置文件都集中
存放于<code>xwbd/电路板名称/cfg</code>文件夹中。</p>
<ul>
<li>编译系统<ul>
<li>配置文件：<code>cfg/XuanWuOS.h</code><ul>
<li>配置文件用C头文件来编写的，目的是为了方便在C源码中引用，
    但是其中定义的<strong>宏</strong>也会被Makefile当成变量来使用，
    详细可参考<a href="../03-Build-System/">构建系统</a>。</li>
<li>配置中的架构、CPU、SOC型号、电路板等信息用于确定编译时各层代码的路径。</li>
</ul>
</li>
<li>源码路径：<code>xwbs</code><ul>
<li>编译系统主要是用Makefile的语法进行编写，但也会使用一些其他脚本语言
    来实现一些辅助功能，例如Shell、Emacs-Lisp、Python等。</li>
</ul>
</li>
</ul>
</li>
<li>移植层<ul>
<li>处理器架构描述层(ADL)<ul>
<li>配置文件：<code>cfg/arch.h</code></li>
<li>源码路径：<code>xwcd/soc/架构/子架构/编译器</code></li>
<li>ADL为相同架构的单片机提供了共同的与架构、指令集、编译器相关源码，
    例如，同为ARMv7架构的单片机STM32F1、STM32F4、STM32H7、I.MX RT1052和S32K
    就复用了<code>xwcd/soc/arm/v7m/gcc</code>中的源代码。</li>
<li>ADL会提供与编译器相关的修饰限定词。因为这些特性通常与
    处理器架构、编译器有关，ANSI-C不能表达这些内容。</li>
<li>ADL会在汇编层面，使用一些特殊指令提供基本的C函数库，
    例如，原子操作库、无锁队列，位操作库、自旋锁等，可充分挖掘架构的潜能。</li>
<li>ADL也会提供一些在架构层面定义的硬件资源的驱动，例如ARMv7架构的单片机，
    无论是哪个厂商的芯片，都有NVIC、Systick等硬件资源。</li>
</ul>
</li>
<li>中央处理器描述层(CDL)<ul>
<li>配置文件：<code>cfg/cpu.h</code></li>
<li>源码路径：ADL目录下的CPU子集目录</li>
<li>处理器架构下又细分为几个CPU子集，例如ARMv7又分为m3、m4和m7。
    CDL是对处理器架构的进一步细分与补充，通常只包含很少的代码或编译配置。</li>
</ul>
</li>
<li>片上系统描述层(SDL)<ul>
<li>配置文件：<code>cfg/soc.h</code></li>
<li>源码路径：CDL目录下的SOC子集目录</li>
<li>玄武OS内核要求SDL实现操作系统移植层(OSPL)中定义的接口。</li>
</ul>
</li>
<li>电路板描述层(BDL)<ul>
<li>配置文件：<code>cfg/board.h</code></li>
<li>源码路径：<code>xwbd/电路板名称/bdl</code></li>
<li>用途：初始化电路板。</li>
</ul>
</li>
</ul>
</li>
<li>玄武OS内核<ul>
<li>配置文件：<code>cfg/xwos.h</code></li>
<li>源码路径：<code>xwos</code></li>
<li>内核分为MP（多处理器）内核与UP（单处理器）内核。</li>
<li>操作系统抽象层（OSAL）：为MP内核与UP内核提供统一的应用接口。</li>
<li>操作系统移植层（OSPL）：移植接口，SDL需要提供OSPL的实现。</li>
</ul>
</li>
<li>中间件<ul>
<li>电路板模块(BM)<ul>
<li>配置文件：<code>cfg/board.h</code></li>
<li>源码路径：<code>xwbd/电路板名称/bm</code></li>
<li>用途：提供BSP；</li>
</ul>
</li>
<li>设备驱动<ul>
<li>配置文件：<code>cfg/xwcd.h</code></li>
<li>源码路径：<code>xwcd/perpheral</code></li>
</ul>
</li>
<li>玄武OS自身提供的中间件<ul>
<li>配置文件：<code>cfg/xwmd.h</code></li>
<li>源码路径：<code>xwmd</code></li>
</ul>
</li>
<li>第三方组件<ul>
<li>配置文件：<code>cfg/xwem.h</code></li>
<li>源码路径：<code>xwem</code></li>
</ul>
</li>
</ul>
</li>
<li>应用层<ul>
<li>应用模块<ul>
<li>配置文件：<code>cfg/xwam.h</code></li>
<li>源码路径：<code>xwam</code></li>
</ul>
</li>
</ul>
</li>
<li>私有软件<ul>
<li>配置文件：<code>cfg/oem.h</code></li>
<li>源码路径：配置文件<code>cfg/XuanWuOS.h</code>中，<code>XuanWuOS_CFG_OEMPATH</code>指定的路径</li>
</ul>
</li>
</ul>
<h2 id="23">2.3.基本类型</h2>
<p>玄武OS的所有基本类型定义如下：</p>
<ul>
<li><code>xwu8_t</code> 8位无符号整数</li>
<li><code>xws8_t</code> 8位有符号整数</li>
<li><code>xwu16_t</code> 16位无符号整数</li>
<li><code>xws16_t</code> 16位有符号整数</li>
<li><code>xwu32_t</code> 32位无符号整数</li>
<li><code>xws32_t</code> 32位有符号整数</li>
<li><code>xwu64_t</code> 64位无符号整数</li>
<li><code>xws64_t</code> 64位有符号整数</li>
<li><code>xwsz_t</code> 大小值（无符号）</li>
<li><code>xwssz_t</code> 大小值（有符号）</li>
<li><code>xwstk_t</code> 栈帧（无符号），必须与指针位宽一致</li>
<li><code>xwptr_t</code> 指针的整数值（无符号），必须与指针位宽一致</li>
<li><code>xwreg_t</code> 寄存器（无符号），必须与指针位宽一致</li>
<li><code>xwsreg_t</code> 寄存器（有符号），必须与指针位宽一致</li>
<li><code>xwer_t</code> 错误码（有符号），通常为负数</li>
<li><code>xwsq_t</code> 序列值/位置/偏移（无符号），必须与指针位宽一致</li>
<li><code>xwssq_t</code> 序列值/位置/偏移（有符号），必须与指针位宽一致</li>
<li><code>xwsid_t</code> ID（有符号），必须与指针位宽一致</li>
<li><code>xwid_t</code> ID（无符号），必须与指针位宽一致</li>
<li><code>xwisr_t</code> 中断向量（函数指针）</li>
<li><code>xwirq_t</code> 中断号（有符号），负的中断号表示系统异常，正的中断号表示外部中断</li>
<li><code>xwpr_t</code> 优先级（有符号）</li>
<li><code>xwbmp_t</code> 位图（无符号）</li>
<li><code>xwtm_t</code> 时间（64位有符号整数，单位：纳秒）</li>
<li><code>xwlfq_t</code> 无锁队列</li>
<li><code>ctor_f</code> 构造函数</li>
</ul>
<pre><code class="C">typedef void (* ctor_f)(void * /*obj*/);
</code></pre>

<ul>
<li><code>dtor_f</code> 析构函数</li>
</ul>
<pre><code class="C">typedef void (* dtor_f)(void * /*obj*/);
</code></pre>

<ul>
<li><code>xwsc_f</code> 系统调用</li>
</ul>
<pre><code class="C">typedef xws64_t (* xwsc_f)(void * /*arg*/, ...);
</code></pre>

<ul>
<li>类型后缀<code>_t</code>换成<code>_a</code>表示此类型的原子类型</li>
</ul>
<h2 id="_1">标准头文件</h2>
<p>标准头文件中包含了玄武OS的基本C/C++语言环境，包括：</p>
<ul>
<li>配置</li>
<li>编译器的宏</li>
<li>类型</li>
<li>错误码</li>
<li>基本信息</li>
</ul>
<pre><code class="C">#include &lt;xwos/standard.h&gt;
</code></pre>

<pre><code class="C++">#include &lt;xwos/standard.hxx&gt;
</code></pre>

<h2 id="24">2.4.配置说明</h2>
<p>玄武OS在设计之初曾考虑过使用现成的配置生成工具，例如Linux内核的Kconfig工具。
但为了降低跨平台开发的工作量和难度，作者最终选择使用C语言的头文件来描述所有配置，
即便这些配置中有一部分是给编译系统使用的（例如路径的配置）。</p>
<h3 id="cfgxuanwuosh">cfg/XuanWuOS.h</h3>
<p>工程总配置：</p>
<ul>
<li><strong>架构描述层(ADL)文件夹</strong><ul>
<li><code>XuanWuOS_CFG_ARCH</code>：架构，可在<strong>xwcd/soc/</strong>中选择<strong>架构文件夹</strong>；</li>
<li><code>XuanWuOS_CFG_SUBARCH</code>：子架构，可在<strong>架构文件夹</strong>中选择<strong>子架构文件夹</strong>；</li>
<li><code>XuanWuOS_CFG_COMPILER</code>：编译器，可在<strong>子架构文件夹*<em>中选择**编译器文件夹</em></strong>；</li>
<li>上述3个配置一起构成<strong>架构描述层(ADL)文件夹</strong>：
    <strong>xwcd/soc/架构文件夹/子架构文件夹/编译器文件夹</strong>
    编译系统能自动将<strong>架构描述层(ADL)文件夹</strong>加入到头文件搜索路径中。</li>
</ul>
</li>
<li><strong>CPU描述层(CDL)文件夹</strong><ul>
<li><code>XuanWuOS_CFG_CPU</code>：CPU子集，可在<strong>架构描述层(ADL)文件夹</strong>中
    选择<strong>CPU描述层(CDL)文件夹</strong>。编译系统能自动将<strong>CPU描述层(CDL)文件夹</strong>加入到
    头文件搜索路径中。</li>
</ul>
</li>
<li><strong>SOC描述层(SDL)文件夹</strong><ul>
<li><code>XuanWuOS_CFG_SOC</code>：片上系统，可在<strong>CPU描述层(CDL)文件夹</strong>中
    选择<strong>SOC描述层(SDL)文件夹</strong>。编译系统能自动将<strong>SOC描述层(SDL)文件夹</strong>加入到
    头文件搜索路径中。</li>
</ul>
</li>
<li><strong>电路板描述层(BDL)文件夹</strong><ul>
<li><code>XuanWuOS_CFG_BOARD</code>：电路板，可在<strong>xwbd文件夹</strong>中
    选择<strong>电路板描述层(BDL)文件夹</strong>。编译系统能自动将<strong>电路板描述层(BDL)文件夹</strong>加入到
    头文件搜索路径中。</li>
</ul>
</li>
<li>链接配置<ul>
<li><code>XuanWuOS_CFG_LDSCRIPT</code>：链接脚本的的相对路径，相对于<strong>xwbd/电路板目录</strong>；</li>
</ul>
</li>
<li>makefile配置<ul>
<li><code>XuanWuOS_CFG_MK_RULE</code>：makefile规则，位于<strong>xwbs</strong>文件夹中；</li>
<li><code>XuanWuOS_CFG_ELF_MK</code>：编译ELF的makefile，位于<strong>xwbs</strong>文件夹中；</li>
<li><code>XuanWuOS_CFG_XWMO_MK</code>：编译玄武模块的makefile，位于<strong>xwbs</strong>文件夹中；</li>
<li><code>XuanWuOS_CFG_XWMO_PREBUILT_MK</code>：导入已编译成静态库的玄武模块的makefile，
    位于<strong>xwbs</strong>文件夹中；</li>
</ul>
</li>
<li><code>XuanWuOS_CFG_CORE</code>：内核的类型，可选择编译<strong>xwos文件夹</strong>下的哪种内核<ul>
<li>mp：多核</li>
<li>up：单核</li>
</ul>
</li>
<li><code>XuanWuOS_CFG_XWCD</code>：是否需要引用驱动库，路径<strong>xwcd</strong>，取值：1|0；</li>
<li><code>XuanWuOS_CFG_XWMD</code>：是否需要引用中间件库，路径<strong>xwmd</strong>，取值：1|0；</li>
<li><code>XuanWuOS_CFG_XWEM</code>：是否需要引用第三方组件库，路径<strong>xwem</strong>，取值：1|0；</li>
<li><code>XuanWuOS_CFG_XWAM</code>：是否需要引用应用组件库，路径<strong>xwam</strong>，取值：1|0；</li>
<li><code>XuanWuOS_CFG_OEMPATH</code>：OEM模块的搜索路径，<ul>
<li>若为相对路径，则为相对于玄武OS根目录的路径；</li>
<li>可以为绝对路径；</li>
<li>路径可指向玄武OS根目录之外。</li>
</ul>
</li>
</ul>
<h3 id="cfgarchh">cfg/arch.h</h3>
<p>架构相关的配置（不同架构，配置不同，更多的注解参考头文件中的注释）：</p>
<ul>
<li>数据大小端选择，下面的配置不可同时配置为1：<ul>
<li><code>ARCHCFG_LITTLE_ENDIAN</code>：小端</li>
<li><code>ARCHCFG_BIG_ENDIAN</code>：大端</li>
</ul>
</li>
<li>架构位宽，取值：<ul>
<li><code>ARCHCFG_16BIT</code>：16位</li>
<li><code>ARCHCFG_32BIT</code>：32位</li>
<li><code>ARCHCFG_64BIT</code>：64位</li>
</ul>
</li>
<li><code>ARCHCFG_FPU</code>：是否包含浮点单元，取值：1|0；</li>
<li><code>ARCHCFG_COMPILER_CLIB</code>：是否使用编译器的C库，取值：1|0；</li>
<li><code>ARCHCFG_COMPILER_ERRNO</code>：是否使用编译器的errno.h，取值：1|0；</li>
<li><code>ARCHCFG_CXX</code>：是否支持C++，取值：1|0；</li>
<li><code>ARCHCFG_IRQ_NUM</code>：架构中断数量；</li>
</ul>
<h3 id="cfgcpuh">cfg/cpu.h</h3>
<p>CPU相关的配置（不同CPU，配置不同，更多的注解参考头文件中的注释）：</p>
<ul>
<li><code>CPUCFG_CPU_NUM</code>：CPU数量；</li>
<li><code>CPUCFG_L1_CACHELINE_SIZE</code>：L1缓存的Cache Line大小；</li>
</ul>
<h3 id="cfgsoch">cfg/soc.h</h3>
<p>片上系统相关的配置（不同SOC，配置不同，更多的注解参考头文件中的注释）：</p>
<ul>
<li><code>SOCCFG_IRQ_NUM</code>：SOC中断数量；</li>
<li><code>SOCCFG_RO_ISRTABLE</code>：中断向量表是否为const的，取值：1|0；</li>
</ul>
<h3 id="cfgboardh">cfg/board.h</h3>
<p>电路板相关的配置（不同电路板，配置不同，更多的注解参考头文件中的注释）。</p>
<h3 id="cfgxwosh">cfg/xwos.h</h3>
<p>操作系统相关的配置</p>
<ul>
<li><code>XWKNCFG_CHECK_PARAMETERS</code>：是否开启API参数检查，取值：1|0；</li>
<li><code>XWKNCFG_BUG</code>：是否启用BUG调试，取值：1|0；</li>
<li><code>XWKNCFG_RELOCATE_DATA</code>：是否需要在初始化时将xwos.data段的从flash中拷贝到RAM内，取值：1|0；</li>
<li>玄武C库：<ul>
<li>日志<ul>
<li><code>XWLIBCFG_LOG</code>：是否启用Log调试，取值：1|0；</li>
<li><code>XWLIBCFG_XWLOG_LEVEL</code>：最低日志等级；</li>
<li><code>XWLIBCFG_XWLOG_BUFSIZE</code>：日志缓冲区大小；</li>
</ul>
</li>
<li>位操作<ul>
<li><code>XWLIBCFG_XWBOP_FFS8</code>：是否启用函数xwbop_ffs8()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FLS8</code>：是否启用函数xwbop_fls8()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RBIT8</code>：是否启用函数xwbop_rbit8()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FFS16</code>：是否启用函数xwbop_ffs16()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FLS16</code>：是否启用函数xwbop_fls16()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RBIT16</code>：是否启用函数xwbop_rbit16()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RE16</code>：是否启用函数xwbop_re16()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RE16S32</code>：是否启用函数xwbop_re16s32()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FFS32</code>：是否启用函数xwbop_ffs32()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FLS32</code>：是否启用函数xwbop_fls32()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RBIT32</code>：是否启用函数xwbop_rbit32()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RE32</code>：是否启用函数xwbop_re32()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RE32S64</code>：是否启用函数xwbop_re32s64()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FFS64</code>：是否启用函数xwbop_ffs64()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_FLS64</code>：是否启用函数xwbop_fls64()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RBIT64</code>：是否启用函数xwbop_rbit64()，取值：1|0；</li>
<li><code>XWLIBCFG_XWBOP_RE64</code>：是否启用函数xwbop_re64()，取值：1|0；</li>
</ul>
</li>
<li>原子操作<ul>
<li><code>XWLIBCFG_XWAOP8</code>：是否启用8位原子操作库，取值：1|0；</li>
<li><code>XWLIBCFG_XWAOP16</code>：是否启用16位原子操作库，取值：1|0；</li>
<li><code>XWLIBCFG_XWAOP32</code>：是否启用32位原子操作库，取值：1|0；</li>
<li><code>XWLIBCFG_XWAOP64</code>：是否启用64位原子操作库，取值：1|0；</li>
<li><code>XWLIBCFG_XWBMPAOP</code>：是否启用位图原子操作库，取值：1|0；</li>
</ul>
</li>
<li><code>XWLIBCFG_MAP</code>：是否启用键值对，取值：1|0；</li>
<li>CRC<ul>
<li><code>XWLIBCFG_CRC32</code>：是否启用CRC32，取值：1|0；</li>
<li><code>XWLIBCFG_CRC32_0X04C11DB7</code>：是否启用CRC32多项式0x04C11DB7，取值：1|0；</li>
<li><code>XWLIBCFG_CRC32_0XEDB88320</code>：是否启用CRC32多项式0xEDB88320，取值：1|0；</li>
<li><code>XWLIBCFG_CRC8</code>：是否启用CRC8，取值：1|0；</li>
<li><code>XWLIBCFG_CRC8_0X07</code>：是否启用CRC8多项式0x07，取值：1|0；</li>
<li><code>XWLIBCFG_CRC8_0X31</code>：是否启用CRC8多项式0x31，取值：1|0；</li>
<li><code>XWLIBCFG_CRC8_0X9B</code>：是否启用CRC8多项式0x9B，取值：1|0；</li>
</ul>
</li>
</ul>
</li>
<li>内存管理<ul>
<li><code>XWMMCFG_ALIGNMENT</code>：内存管理对齐的字节数；</li>
<li><code>XWMMCFG_STACK_ALIGNMENT</code>：栈对齐的字节数；</li>
<li>栈的类型，下面的配置不可同时配置为1：<ul>
<li><code>XWMMCFG_FD_STACK</code>：满递减栈</li>
<li><code>XWMMCFG_ED_STACK</code>：空递减栈</li>
<li><code>XWMMCFG_FA_STACK</code>：满递增栈</li>
<li><code>XWMMCFG_EA_STACK</code>：满递增栈</li>
</ul>
</li>
<li><code>XWMMCFG_MEMSLICE</code>：是否启用内存切片算法，取值：1|0；</li>
<li><code>XWMMCFG_BMA</code>：是否启用伙伴算法，取值：1|0；</li>
<li><code>XWMMCFG_MEMPOOL</code>：是否启用内存池，取值：1|0；</li>
</ul>
</li>
<li>MP内核配置<ul>
<li>调度器<ul>
<li><code>XWMPCFG_SYSHWT_PERIOD</code>：硬件定时器周期；</li>
<li><code>XWMPCFG_SKD_PRIORITY_RT_NUM</code>：调度器实时优先级数量；</li>
<li><code>XWMPCFG_SKD_IDLE_STACK_SIZE</code>：空闲任务栈大小；</li>
<li><code>XWMPCFG_SKD_BH</code>：是否启用中断底半部，取值：1|0；</li>
<li><code>XWMPCFG_SKD_BH_STACK_SIZE</code>：中断底半部栈大小；</li>
<li><code>XWMPCFG_SKD_TCB_MEMSLICE</code>：是否启用TCB对象缓存；</li>
<li><code>XWMPCFG_SKD_SWT</code>：是否启用软件定时器，取值：1|0；</li>
<li><code>XWMPCFG_SKD_SWT_MEMSLICE</code>：是否启用软件定时器对象缓存，取值：1|0；</li>
</ul>
</li>
<li>同步<ul>
<li><code>XWMPCFG_SYNC_PLSEM</code>：是否启用管道信号量，取值：1|0；</li>
<li><code>XWMPCFG_SYNC_RTSEM</code>：是否启用实时信号量，取值：1|0；</li>
<li><code>XWMPCFG_SYNC_SEM_MEMSLICE</code>：是否启用信号量对象缓存，取值：1|0；</li>
<li><code>XWMPCFG_SYNC_COND_MEMSLICE</code>：是否启用条件量对象缓存，取值：1|0；</li>
<li><code>XWMPCFG_SYNC_EVT</code>：是否启用事件，取值：1|0；</li>
<li><code>XWMPCFG_SYNC_EVT_MAXNUM</code>：事件位最大数量；</li>
<li><code>XWMPCFG_SYNC_EVT_MEMSLICE</code>：是否启用事件对象缓存，取值：1|0；</li>
</ul>
</li>
<li>锁<ul>
<li><code>XWMPCFG_LOCK_MTX_MEMSLICE</code>：是否启用互斥锁对象缓存，取值：1|0；</li>
</ul>
</li>
</ul>
</li>
<li>UP内核配置<ul>
<li>调度器<ul>
<li><code>XWUPCFG_SYSHWT_PERIOD</code>：硬件定时器周期；</li>
<li><code>XWUPCFG_SKD_PRIORITY_RT_NUM</code>：调度器实时优先级数量；</li>
<li><code>XWUPCFG_SKD_IDLE_STACK_SIZE</code>：空闲任务栈大小；</li>
<li><code>XWUPCFG_SKD_BH</code>：是否启用中断底半部，取值：1|0；</li>
<li><code>XWUPCFG_SKD_BH_STACK_SIZE</code>：中断底半部栈大小；</li>
<li><code>XWUPCFG_SKD_PM</code>：是否启用电源管理，取值：1|0；</li>
<li><code>XWUPCFG_SKD_THRD_EXIT</code>：是否启用线程退出，取值：1|0；</li>
<li><code>XWUPCFG_SKD_SWT</code>：是否启用软件定时器，取值：1|0；</li>
</ul>
</li>
<li>同步<ul>
<li><code>XWUPCFG_SYNC_PLSEM</code>：是否启用管道信号量，取值：1|0；</li>
<li><code>XWUPCFG_SYNC_RTSEM</code>：是否启用实时信号量，取值：1|0；</li>
<li><code>XWUPCFG_SYNC_COND</code>：是否启用条件量，取值：1|0；</li>
<li><code>XWUPCFG_SYNC_EVT</code>：是否启用事件，取值：1|0；</li>
<li><code>XWUPCFG_SYNC_EVT_MAXNUM</code>：事件位最大数量；</li>
</ul>
</li>
<li>锁<ul>
<li><code>XWUPCFG_LOCK_MTX</code>：是否启用互斥锁，取值：1|0；</li>
<li><code>XWUPCFG_LOCK_FAKEMTX</code>：是否启用虚假互斥锁，取值：1|0；</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="cfgxwmdh">cfg/xwmd.h</h3>
<p>中间件相关的配置：TODO</p>
<h3 id="cfgxwcdh">cfg/xwcd.h</h3>
<p>设备驱动相关的配置：TODO</p>
<h3 id="cfgxwemh">cfg/xwem.h</h3>
<p>外部模块相关的配置：TODO</p>
<h3 id="cfgxwamh">cfg/xwam.h</h3>
<p>应用模块相关的配置：TODO</p>
<h3 id="cfgoemh">cfg/oem.h</h3>
<p>OEM模块相关的配置：TODO</p>
<h2 id="25">2.5.附录</h2>
<ul>
<li><a href="../00-index/">返回目录</a></li>
</ul></div>
            </div>
        </div>

        <footer class="col-md-12">
            <hr>
            <p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p>
        </footer>
        <script>
            var base_url = "../..",
                shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83};
        </script>
        <script src="../../js/base.js" defer></script>
        <script src="../../search/main.js" defer></script>

        <div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="searchModalLabel">搜索</h4>
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            </div>
            <div class="modal-body">
                <p>
                    在这里所有文档：
                </p>
                <form>
                    <div class="form-group">
                        <input type="search" class="form-control" placeholder="搜索..." id="mkdocs-search-query" title="Type search term here">
                    </div>
                </form>
                <div id="mkdocs-search-results"></div>
            </div>
            <div class="modal-footer">
            </div>
        </div>
    </div>
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4>
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            </div>
            <div class="modal-body">
              <table class="table">
                <thead>
                  <tr>
                    <th style="width: 20%;">Keys</th>
                    <th>Action</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td class="help shortcut"><kbd>?</kbd></td>
                    <td>Open this help</td>
                  </tr>
                  <tr>
                    <td class="next shortcut"><kbd>n</kbd></td>
                    <td>Next page</td>
                  </tr>
                  <tr>
                    <td class="prev shortcut"><kbd>p</kbd></td>
                    <td>Previous page</td>
                  </tr>
                  <tr>
                    <td class="search shortcut"><kbd>s</kbd></td>
                    <td>Search</td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div class="modal-footer">
            </div>
        </div>
    </div>
</div>

    </body>
</html>
